package com.atguigu.system.common.utils;

import com.atguigu.model.system.SysDept;


import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 根据菜单数据构建菜单树的工具类
 * </p>
 */
public class DeptHelper {
    /**
     * 使用递归方法建菜单
     *
     * @param sysDeptList 普通的list集合
     * @return
     */
    public static List<SysDept> buildTree(List<SysDept> sysDeptList) {
        //创建存储树型菜单的集合
        List<SysDept> trees = new ArrayList<>();
        for (SysDept sysDept : sysDeptList) {

            //寻找根节点
            if (sysDept.getParentId() == 0) {
                //利用递归方法添加元素
                trees.add(findChildren(sysDept, sysDeptList));
            }
        }
        //返回重构好的树型结构的集合
        return trees;
    }

    /**
     * 递归查找子节点
     *
     * @param treeNodes
     * @return sysMenu
     */
    private static SysDept findChildren(SysDept sysDept, List<SysDept> treeNodes) {
        //初始子节点--及空集合
        sysDept.setChildren(new ArrayList<>());
        //遍历集合

        for (SysDept ob : treeNodes) {
            //满足条件的，开始递归
            if (Long.parseLong(sysDept.getId()) == ob.getParentId()) {

                //若没有子菜单了，则初始化子菜单集合,及从 null => 空的集合
                if (sysDept.getChildren() == null) {
                    sysDept.setChildren(new ArrayList<>());
                }

                //若有子项，把子项添加到菜单,并继续递归，直到找不到为止
                sysDept.getChildren().add(findChildren(ob, treeNodes));
            }
        }

        return sysDept;//递归出口,返回菜单集合
    }
}
